知识点名称:Canvas
编号: K8-2
前驱知识点编号:K8-1
作者:
讲义内容:
8.2.1 Canvas类
在现实生活中的绘图,需要“纸”和“笔”,同样的Android开发中基于Canvas的绘图也有“纸”和“笔”的概念,即Canvas类和Paint类。
Canvas用一个虚拟的平面来工作,以便把图形绘制在实际的表面上---它持有所有的用draw开头的方法调用。通过Canvas对象,实际上是执行一个底层的位图绘制处理,这个位图被放置到窗口中。
在onDraw()回调方法的绘制事件中,会提供一个Canvas对象,并且只需要把要绘制的内容交给Canvas对象就可以了。在处理SurfaceView对象时,还可以从SurfaceHolder.lockCanvas()方法来获取一个Canvas对象。
如果需要创建一个新的Canvas对象,那么就必须在实际执行绘制处理的Canvas对象上定义Bitmap对象。对于Canvas对象来说,这个Bitmap对象是始终必须的,应该像以下示例这样建立一个新的Canvas对象:
Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
现在就可以在被定义的Bitmap对象上绘图了。在Canvas对象上绘制图形之后,能够用Canvas.drawBitmap(Bitmap, …)的一个方法,把该Bitmap对象绘制到另一个Canvas对象中。
Canvas类的方法主要用于绘制各类图元,包括基本形状的绘制:即以draw开头的各类方法,包括点、线、矩形、椭圆、圆弧、圆等,图片的绘制,文本的绘制,路径的绘制及各类画布操作,包括画布的裁剪、变换及快照等操作。
可以进行绘制调用的Canvas、拥有像素的Bitmap、图元(比如:Rect, Path, Text, Bitmap)、描述风格与颜色的Paint。
8.2.2 Bitmap类
Bitmap是一个final类,因此不能被继承。Bitmap只有一个构造方法,且该构造方法是没有任何访问权限修饰符修饰,也就是说该构造方法是friendly,但是谷歌称Bitmap的构造方法是private(私有的),感觉有点不严谨。不管怎样,一般情况下,我们不能通过构造方法直接新建一个Bitmap对象。
Bitmap是Android系统中的图像处理中最重要类之一。Bitmap可以获取图像文件信息,对图像进行剪切、旋转、缩放,压缩等操作,并可以以指定格式保存图像文件。
8.2.3 Paint类
Paint拥有绘制几何,文本,位图的风格与颜色信息。
- setARGB(int a, int r, int g, int b):设置画笔颜色
- setAntiAlias(boolean aa):设置是否抗锯齿
- setColor(int color):设置画笔颜色
- setAlpha(int a):设置画笔透明度
- setTextSize(float textSize):设置字体大小
- setUnderlineText(boolean underlineText):设置文本带有下划线效果
- setStrikeThruText(boolean strikeThruText):设置文本带删除线效果
- setTextSkewX(float skewX):设置文本倾斜度
- setTextScaleX(float scaleX):设置文本缩放大小
- setTextAlign(Paint.Align align):设置文本对齐方式
- setTypeface(Typeface typeface):设置字体
- setStyle(Paint.Style style):设置画笔样式,画笔样式有三种
Paint.Style.FILL:默认值,用这种风格绘制的几何图与文本将被填充,它画出来的是实心图
Paint.Style.STROKE:用这种风格绘制的几何图与文本将被画出外边框,它画出来的是空心图
Paint.Style.FILL_AND_STROKE:用这种风格绘制的几何图与文本将被填充并被画出外边框,从表面看它画出来的也是实心图,不过比一般画出来的实心图多了一层外边框
- setStrokeWidth(float width):设置画笔外边框的宽度,可以想象成画笔“画出线条的宽度”
- setXfermode(Xfermode xfermode):设置图像重叠时的处理方式
- setShader(Shader shader):设置着色器
- setPathEffect(PathEffect effect):设置或者清除路径效果